#include "widget.h"
#include "./ui_widget.h"
#include <QTextStream>
#include <qDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 加载文本内容
    address = "C:\\Users\\48117\\Desktop\\word_list1.txt";
    load();

    // 2. 初始化控件
    // 随机选择一个英文单词放到英文输入框当中
    flag = true;  // 默认情况下是英译中
    select();
    ui->pushButton_commit->setShortcut(Qt::Key_Return);
}

Widget::~Widget()
{
    delete ui;
}

// 从哈希表中，选择一个英语单词/中文放到QLineEdit中
void Widget::select()
{
    srand(time(nullptr));

    int n = rand() % word_list.size();
    if(flag)
    {
        this->setWindowTitle("英译中");
        ui->lineEdit_translation->setText(word_list[n].first);
    }
    else
    {
        this->setWindowTitle("中译英");
        ui->lineEdit_translation->setText(word_list[n].second);
    }
}

// 加载单词本
void Widget::load()
{
    word_list.clear();
    word_chinese.clear();
    chinese_word.clear();
    // 1. 读取文件内容，初始化哈希表
    QFile file(address);
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        qDebug() << "打开失败：" << file.errorString();
        return;
    }

    QTextStream in(&file);
    in.setEncoding(QStringConverter::Utf8);  // 对应 UTF-8 编码

    QString line;
    while (in.readLineInto(&line))
    {
        // 读取一行到line
        int spacePos = line.indexOf(' ');  // 查找空格位置
        if (spacePos == -1) continue;  // 跳过格式错误的行

        QString key = line.left(spacePos);  // 英文部分
        QString value = line.mid(spacePos + 1);  // 中文部分

        word_list.push_back(std::make_pair(key, value));
        word_chinese.insert(std::make_pair(key, value));

        // 这里需要注意，因为可能存在多个单词的中文意思是一样的情况
        // 我们先判断一下这个中文意思是否存在，不存在直接插入，若存在，则拼接再插入
        auto it = chinese_word.find(value);
        if(it == chinese_word.end())
        {
            chinese_word.insert(std::make_pair(value, key));
        }
        else
        {
            QString text = chinese_word[value];
            text = text + "、" + key;
            chinese_word.erase(value);
            chinese_word.insert(std::make_pair(value, text));
        }
    }

    file.close();
}

void Widget::on_pushButton_commit_clicked()
{
    // 判断两个QLineEdit中的内容是否匹配
    QString key = ui->lineEdit_translation->text();
    QString value = ui->lineEdit_fill->text();
    if(value.isEmpty())
    {
        ui->label->setText("提交为空");
        return;
    }
    if(flag)
    {
        // 英译中，key是英文，value是中文
        if(value == word_chinese[key])
        {
            ui->label->setText("翻译正确");
            select();
            ui->lineEdit_fill->clear();
        }
        else
        {
            ui->label->setText("翻译错误");
        }
    }
    else
    {
        // 中译英，key是中文，value是英文
        if(value == chinese_word[key])
        {
            ui->label->setText("翻译正确");
            select();
            ui->lineEdit_fill->clear();
        }
        else
        {
            ui->label->setText("翻译错误");
        }
    }
}


void Widget::on_pushButton_enToCh_clicked()
{
    if(flag) return ;
    flag = true;
    select();
}


void Widget::on_pushButton_chToEn_clicked()
{
    if(!flag) return ;
    flag = false;
    select();
}


void Widget::on_pushButton_noteBook_clicked()
{
    QString tmp = ui->lineEdit_fill->text();
    if(tmp.isEmpty())
    {
        ui->label->setText("传入地址为空");
        return ;
    }
    address = tmp;
    load();
    select();
    ui->lineEdit_fill->clear();
}

